package com.geek.factory.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.geek.factory.entity.StockCheckDetail;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 库存盘点明细服务接口
 * </p>
 *
 * @author author
 * @since 2025-06-29
 */
public interface IStockCheckDetailService extends IService<StockCheckDetail> {

    /**
     * 从库存分布生成盘点明细
     * @param checkId 盘点单ID
     * @param warehouseId 仓库ID
     * @param itemType 物品类型
     * @return 是否成功
     */
    boolean generateDetailsFromInventory(Integer checkId, Integer warehouseId, String itemType);

    /**
     * 更新实际盘点数量
     * @param detailId 明细ID
     * @param actualQuantity 实际数量
     * @param updatedBy 更新人
     * @return 是否成功
     */
    boolean updateActualQuantity(Integer detailId, BigDecimal actualQuantity, String updatedBy);

    /**
     * 更新盘点位置信息
     * @param detailId 明细ID
     * @param location 位置信息
     * @param shelfId 货架ID
     * @param updatedBy 更新人
     * @return 是否成功
     */
    boolean updateLocation(Integer detailId, String location, Integer shelfId, String updatedBy);

    /**
     * 更新盘点状态
     * @param detailId 明细ID
     * @param checkStatus 盘点状态
     * @param updatedBy 更新人
     * @return 是否成功
     */
    boolean updateCheckStatus(Integer detailId, String checkStatus, String updatedBy);

    /**
     * 批量更新盘点状态
     * @param detailIds 明细ID列表
     * @param checkStatus 盘点状态
     * @param updatedBy 更新人
     * @return 是否成功
     */
    boolean batchUpdateCheckStatus(List<Integer> detailIds, String checkStatus, String updatedBy);

    /**
     * 获取有差异的盘点明细
     * @param checkId 盘点单ID
     * @return 差异明细列表
     */
    List<StockCheckDetail> getDifferenceDetails(Integer checkId);

    /**
     * 获取盘点明细统计信息
     * @param checkId 盘点单ID
     * @return 统计信息
     */
    Map<String, Object> getDetailStats(Integer checkId);

    /**
     * 批量更新盘点明细
     * @param details 明细列表
     * @param updatedBy 更新人
     * @return 是否成功
     */
    boolean batchUpdateDetails(List<StockCheckDetail> details, String updatedBy);
}